//48.旋转图像
//https://leetcode.cn/problems/rotate-image/
class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        vector<vector<int>> ret(n,vector<int>(n));
        for(int i = 0;i<n;++i)
            for(int k = 0;k<n;++k) ret[k][n-i-1] = matrix[i][k];
        
        ret.swap(matrix);
    }
};



//原地旋转 - 水平+对角线旋转
class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int n = matrix.size();
        //这里调整一半的次数 如果调整n次则调整完与原数组相同 (因为对称调整只需要调整n/2次)
        for(int i = 0;i<n/2;++i)
            for(int k = 0;k<n;++k) swap(matrix[n-i-1][k],matrix[i][k]);
        
        //旋转对角线
        //之所以小于i是对角线条数
        for(int i = 0;i<n;++i)
            for(int k = 0;k<i;++k) swap(matrix[i][k],matrix[k][i]);
    }
};